package cn.iocoder.yudao.module.resource.service.session;

import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.resource.controller.admin.session.vo.SessionPageReqVO;
import cn.iocoder.yudao.module.resource.controller.admin.session.vo.SessionSaveReqVO;
import cn.iocoder.yudao.module.resource.dal.dataobject.session.SessionDO;
import jakarta.validation.Valid;

/**
 * 会话 Service 接口
 *
 * @author lizhongwen
 */
public interface SessionService {

    /**
     * 创建会话
     *
     * @param createReqVO 创建信息
     * @return 编号
     */
    Long createSession(@Valid SessionSaveReqVO createReqVO);

    /**
     * 更新会话
     *
     * @param updateReqVO 更新信息
     */
    void updateSession(Long sessionId, @Valid SessionSaveReqVO updateReqVO);

    /**
     * 删除会话
     *
     * @param id 编号
     */
    void deleteSession(Long id);

    void deleteSessionByUserId(Long userId, Long id);


    /**
     * 获得会话
     *
     * @param id 编号
     * @return 会话
     */
    SessionDO getSession(Long id);

    SessionDO getSessionByUserId(Long userId, Long sessionId);

    Long getSessionByRoleIdWithLock(Long loginUserId, Long roleId, Integer storyId);

    SessionDO getSessionByRoleId(Long userId, Long roleId, Integer storyId);

    /**
     * 获得会话分页
     *
     * @param pageReqVO 分页查询
     * @return 会话分页
     */
    PageResult<SessionDO> getSessionPage(SessionPageReqVO pageReqVO);

    PageResult<SessionDO> selectPageByUserId(Long userId, SessionPageReqVO pageReqVO);


}